package createThread.cn.tedu.threaddemo.test3;

public class ThreadPropertiesAndMethods {
    public static void main(String[] args) throws InterruptedException {

        Thread t = new Thread(()->{
            int sum = 0;
            for (int i = 0; i < 1000; i++) {
                sum += i;
            }

        },"thread 1");
//        t.start();
        /**
         * 1.得到线程的id
         */
        long id = t.getId();
        System.out.println("线程的id: "+id);
        /**
         * 2.得到线程的名字name
         * 同时根据线程的构造方法可以，为线程创建名字，如果没有创建名字就得到默认的名字
         */
        String name = t.getName();
        System.out.println("线程的name : "+name);
        /**
         * 3.获取线程的优先级priority
         */
        int priority = t.getPriority();
        System.out.println("线程的priority: " + priority);

        /**
         * 4.守护线程和非守护线程
         * 4.1守护线程是来守护非守护线程的
         * 4.2只要有一个非守护线程结束，守护线程就不能结束，必须等到所有守护线程结束，非守护线程才能结束
         *
         */
        Thread thread = new Thread(()->{
            /**
             * 1.先得到这个线程的的引用
             *
             */
            Thread cur = Thread.currentThread();
            boolean daemon = cur.isDaemon();
            System.out.println("thread线程是不是守护线程: "+daemon);
            System.out.println("thread线程默认是非守护线程");
            long sum = 0;
            for (int i = 1; i <= 10; i++) {
                sum+=i;
            }
            System.out.println("sum: "+sum);
        });
        thread.setDaemon(true);
        thread.start();
        /**
         * 如果我将main线程设置为守护线程，那么main线程将会等待thread线程中的计算完毕才会结束
         * 愚蠢的想法，因为线程启动的过程中使用setDaemon方法会抛出IllegalThreadStateException
         * 所以我们应该将thread线程设置为守护线程，来守护主线程
         */
        System.out.println("thread线程是否还在 "+thread.isAlive());
        Thread.sleep(1000);
        for (int i = 0; i < 10000; i++) {
            System.out.println("hello world");
        }
        System.out.println("main线程执行结束");
        System.out.println("thread线程是否还在 "+thread.isAlive());
    }
}
